Use @Catch() with no argument to catch everything. Branch on instanceof HttpException — known HTTP exceptions expose their status and message to the client. Unknown errors are logged in full server-side but return a generic 500 to the client. This two-branch pattern is the production standard.
Always log the full error including stack trace for unexpected errors.
Never expose internal error details, stack traces, or DB errors to the client.
HTTP exceptions are expected client errors — surface their message and status code.
Unknown errors should always return 500 with a generic message.
Include the request path and timestamp in error responses for client-side debugging.